﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MIZ.Models
{
    [MetadataType(typeof(AandoeningValidationClass))]
    public partial class Aandoeningen
    {
        public static Aandoeningen ReturnViews(int id)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();
            return db.AandoeningenSet.Find(id);
        }

        public static Aandoeningen Create(Aandoeningen aandoeningen)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();
            
            if (aandoeningen.Beschrijving == "" || aandoeningen.Beschrijving == null) aandoeningen.Beschrijving = "n.v.t.";

            db.AandoeningenSet.Add(aandoeningen);
            db.SaveChanges();

            return aandoeningen;
        }

        public static Aandoeningen Edit(Aandoeningen aandoeningen)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();

            db.Entry(aandoeningen).State = EntityState.Modified;
            db.SaveChanges();

            return aandoeningen;
        }

        public static Aandoeningen Delete(int id)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();

            Aandoeningen aandoeningen = db.AandoeningenSet.Find(id);

            List<Meetinstrument> meetinstrumentenlijst = db.MeetinstrumentSet.ToList();

            for (long i = 0; i < meetinstrumentenlijst.LongCount(); i++)
            {
                if (meetinstrumentenlijst[Convert.ToInt32(i)].Aandoeningen == aandoeningen)
                {
                    meetinstrumentenlijst[Convert.ToInt32(i)].Aandoeningen.Remove(aandoeningen);
                }
            }

            db.AandoeningenSet.Remove(aandoeningen);
            db.SaveChanges();

            return aandoeningen;
        }

        public static List<SelectListItem> ReturnListCustomAandoeningen()
        {
            DatabaseModelContainer db = new DatabaseModelContainer();
            List<SelectListItem> _ReturnLijst = new List<SelectListItem>();
            ICollection<Meetinstrument> _MeetinstrumentenLijst = MIZ.Models.Meetinstrument.GetSetMeetinstrumentenLijst;
            List<Aandoeningen> _AandoeningenLijst = new List<Aandoeningen>();
            List<Aandoeningen> _UniekeAandoeningenLijst = new List<Aandoeningen>();
            Meetinstrument _Meetinstrument = null;
            Aandoeningen _Aandoening = null;
            bool _Aanwezig = false;

            for (int i = 0; i < _MeetinstrumentenLijst.Count; i++)
            {
                _Meetinstrument = _MeetinstrumentenLijst.ElementAt(i);
                _AandoeningenLijst = _Meetinstrument.Aandoeningen.ToList();
                for (int j = 0; j < _AandoeningenLijst.Count; j++)
                {
                    _Aandoening = _AandoeningenLijst[j];
                    for (int k = 0; k < _UniekeAandoeningenLijst.Count; k++)
                    {
                        if (!_Aanwezig)
                        {
                            if (_UniekeAandoeningenLijst[k] == _Aandoening)
                            {
                                _Aanwezig = true;
                            }
                        }
                    }
                    if (!_Aanwezig)
                    {
                        _UniekeAandoeningenLijst.Add(_Aandoening);
                    }
                    else
                    {
                        _Aanwezig = false;
                    }
                }
            }

            for (int i = 0; i < _UniekeAandoeningenLijst.Count; i++)
            {
                string s = _UniekeAandoeningenLijst[i].Aandoening;
                _ReturnLijst.Add(new SelectListItem() { Text = s, Value = s });
            }

            return _ReturnLijst;
        }

        public static ICollection<Meetinstrument> VoerKeuzeAandoeningDoor(string gekozenAandoening)
        {
            DatabaseModelContainer db = new DatabaseModelContainer();
            ICollection<Meetinstrument> _ReturnLijst = null;
            if (gekozenAandoening == null || gekozenAandoening == "")
            {
                _ReturnLijst = MIZ.Models.Meetinstrument.GetSetMeetinstrumentenLijst;
            }
            else
            {
                Aandoeningen _Aandoening = ZoekGekozenAandoening(db, gekozenAandoening);
                ICollection<Meetinstrument> _TempMeetinstrumentenLijst = _Aandoening.Meetinstrument.ToList();
                ICollection<Meetinstrument> _OudMeetinstrumentenLijst = MIZ.Models.Meetinstrument.GetSetMeetinstrumentenLijst;
                _ReturnLijst = MIZ.Models.Meetinstrument.MaakNieuweLijstMeetinstrumentenOBVKeuze(_OudMeetinstrumentenLijst, _TempMeetinstrumentenLijst);
            }
            return _ReturnLijst;
        }

        /// <summary>
        /// Zoekt de aandoening o.b.v. de gekozen index van de dropdownlist
        /// </summary>
        /// <param name="db"></param>
        /// <param name="gekozenAandoening"></param>
        /// <returns>Aandoeningen</returns>
        private static Aandoeningen ZoekGekozenAandoening(DatabaseModelContainer db, string gekozenAandoening)
        {
            Aandoeningen _Aandoening = null;
            List<Aandoeningen> _TempLijst = db.AandoeningenSet.ToList();

            for (int i = 0; i < _TempLijst.Count; i++)
            {
                if (_TempLijst[i] != null)
                {
                    string s = _TempLijst[i].Aandoening.ToString();
                    if (s == gekozenAandoening)
                    {
                        _Aandoening = _TempLijst[i];
                    }
                }
            }
            return _Aandoening;
        }
    }
}